// homework5.c

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

#define BUFFER_SIZE 1024           /* 每次读/写缓存大小，影响运行效率 */
#define SRC_FILE_NAME "test-s.txt" /* 源文件名 */
#define DEST_FILE_NAME "est-d.txt" /* 目标文件名 */
#define OFFSET 10240               /* 复制的数据大小 */

int main()
{
    int src_file, dest_file;
    unsigned char buff[BUFFER_SIZE];
    int real_read_len;

    /* 以只读方式打开源文件 */
    // 补全
     int fd1 = open(SRC_FILE_NAME, O_RDONLY, 0644);
    if(fd1 == -1)
    {
        perror("源文件打开失败");
        return -1;
    }
    /* 以只写方式打开目标文件，若此文件不存在则创建该文件, 访问权限值为644 */
    // 补全
    fd2 = open(DEST_FILE_NAME, O_WRONLY, 0644);
    if (fd2 == -1)
    {
        perror("目标文件打开失败");
        return -1;
    }

    /* 将源文件的读/写指针移到后10KB的起始位置 */
    // 补全
    off_t off =  lseek(fd1, -OFFSET, SEEK_END);
    if(off == -1)
    {
        perror("源文件移动失败");
        return;
    }

    off = lseek(fd2, -OFFSET, SEEK_END);
    if (off == -1)
    {
        perror("目标文件移动失败");
        return;
    }

    /* 读取源文件的后10KB数据并写到目标文件中，每次读写1KB */
    // 补全
    int count = 1024;
    char buff[1024] = {0};
    while (BUFFER_SIZE)
    {
        int ret = read(fd1, buff, count);
        buff[ret] = '\0';
        if (ret == -1)
        {
            perror("源文件读取失败");
            return;
        }
        ret = write(fd2, buf, count);
        if (ret == -1)
        {
            perror("目标文件写入失败");
            return;
        }
        BUFFER_SIZE -= count;
    }

    close(dest_file);
    close(src_file);
    exit(0);
}